﻿Imports PTIC_Util.GestionCalculs
Imports PTIC_Util
Imports Actuariat
Imports OMANE.Common.Model.Parametrage

Namespace moteurTauxGaranti2

    ''' <summary>
    ''' La classe contenant toutes les simulations à effectuer sur le moteur 2
    ''' </summary>
    ''' <remarks></remarks>
    Partial Public Class simulationsMoteur2
        Inherits FonctionCalculRacine

        Protected _moteur As Moteur_Methode2

        ''' <summary>
        ''' 
        ''' </summary>
        ''' <remarks></remarks>
        Public Sub New(ByVal moteur As Moteur_Methode2)
            MyBase.New(TypeRecalcul.SurOrdre)
            _lFonctionsCalculIntermediaires = New SimulIndList
            AddHandler CType(_lFonctionsCalculIntermediaires, SimulIndList).afterRemove, AddressOf onSimulation_Removed
            AddHandler CType(_lFonctionsCalculIntermediaires, SimulIndList).afterAdd, AddressOf onSimulation_Added
            _moteur = moteur
            defaut()
        End Sub

        ''' <summary>
        ''' 
        ''' </summary>
        ''' <remarks></remarks>
        Public Sub defaut()

            ''AjouteFonctionCalculIntermediaire(nomTx_TechA, New simulationSensibiliteParametre(_moteur, nomTx_TechA, -0.02, 0.02, 0.004, 0.01))
            Dim simulTx_TechA As New SimulIndMoteur2(_moteur)
            Dim paramSimulTx_TechA As New ParamSimulInd(nomTx_TechA)
            paramSimulTx_TechA.chocMin = -0.01
            paramSimulTx_TechA.chocMax = 0.01
            paramSimulTx_TechA.Pas = 0.005
            simulTx_TechA.listeParametres.Add(paramSimulTx_TechA)
            simulTx_TechA.Description = nomTx_TechA
            AjouteFonctionCalculIntermediaire(simulTx_TechA)

            Dim simulDuree_Actu As New SimulIndMoteur2(_moteur)
            Dim paramSimulDuree_Actu As New ParamSimulInd(nomDuree_Actu)
            paramSimulDuree_Actu.chocMin = -12
            paramSimulDuree_Actu.chocMax = 12
            paramSimulDuree_Actu.Pas = 6
            simulDuree_Actu.listeParametres.Add(paramSimulDuree_Actu)
            simulDuree_Actu.Description = nomDuree_Actu
            AjouteFonctionCalculIntermediaire(simulDuree_Actu)

            Dim simulTxNom_Actu As New SimulIndMoteur2(_moteur)
            Dim paramTxNom_Actu As New ParamSimulInd(nomTxNom_Actu)
            paramTxNom_Actu.chocMin = -0.01
            paramTxNom_Actu.chocMax = 0.01
            paramTxNom_Actu.Pas = 0.005
            simulTxNom_Actu.listeParametres.Add(paramTxNom_Actu)
            simulTxNom_Actu.Description = nomTxNom_Actu
            AjouteFonctionCalculIntermediaire(simulTxNom_Actu)

            Dim simulTx_CommiContA As New SimulIndMoteur2(_moteur)
            Dim paramSimulTx_CommiContA As New ParamSimulInd(nomTx_CommiContA)
            paramSimulTx_CommiContA.chocMin = -0.2
            paramSimulTx_CommiContA.chocMax = 0.2
            paramSimulTx_CommiContA.Pas = 0.05
            simulTx_CommiContA.listeParametres.Add(paramSimulTx_CommiContA)
            simulTx_CommiContA.Description = nomTx_CommiContA
            AjouteFonctionCalculIntermediaire(simulTx_CommiContA)

            Dim SimulTx_fraiGestA As New SimulIndMoteur2(_moteur)
            Dim paramSimulTx_fraiGestA As New ParamSimulInd(nomTx_fraiGestA)
            paramSimulTx_fraiGestA.chocMin = -0.05
            paramSimulTx_fraiGestA.chocMax = 0.05
            paramSimulTx_fraiGestA.Pas = 0.01
            SimulTx_fraiGestA.listeParametres.Add(paramSimulTx_fraiGestA)
            SimulTx_fraiGestA.Description = nomTx_fraiGestA
            AjouteFonctionCalculIntermediaire(SimulTx_fraiGestA)

        End Sub

        ''' <summary>
        ''' 
        ''' </summary>
        ''' <remarks></remarks>
        Public Function Values() As List(Of IFonctionCalcul)
            Return ListeFonctionsCalculIntermediaires()
        End Function

#Region "Gestion des évènements reçus de l'extérieur"
        ''' <summary>
        ''' Méthode exécutée lorsqu'une simulation est supprimée
        ''' </summary>
        ''' <remarks></remarks>
        Private Sub onSimulation_Removed(ByVal sender As Object, ByVal e As SimulIndListEventArgs)
            Dim simulation As SimulIndMoteur2 = CType(e.simulModifiee, SimulIndMoteur2)
            RemoveHandler simulation.EtatCalculChanged, AddressOf onSimulationIndivMoteur2_EtatCalculValueChanged
            'simulation.RetireObserver(Me)
            RaiseEvent listeSimulations_HasChanged(Me, _
                        New SimulIndListEventArgs(simulation, _
                            SimulIndListEventArgs.natureModifications.Suppression))
        End Sub
        ''' <summary>
        ''' Méthode exécutée lorsqu'une simulation est ajoutée
        ''' </summary>
        ''' <remarks></remarks>
        Private Sub onSimulation_Added(ByVal sender As Object, ByVal e As SimulIndListEventArgs)
            Dim simulation As SimulIndMoteur2 = CType(e.simulModifiee, SimulIndMoteur2)
            AddHandler simulation.EtatCalculChanged, AddressOf onSimulationIndivMoteur2_EtatCalculValueChanged
            'simulation.ajouteObserver(Me)
            RaiseEvent listeSimulations_HasChanged(Me, New SimulIndListEventArgs(simulation, SimulIndListEventArgs.natureModifications.Ajout))
        End Sub
        Private Sub onSimulationIndivMoteur2_EtatCalculValueChanged(ByVal sender As Object, ByVal e As EventArgs)
            RaiseEvent listeSimulations_HasChanged(Me, _
                                   New SimulIndListEventArgs(sender, _
                                       SimulIndListEventArgs.natureModifications.EtatCalcul))
        End Sub
#End Region

#Region "Evènements générés"
        Public Event listeSimulations_HasChanged As listeSimulationsEventHandler
        Public Delegate Sub listeSimulationsEventHandler(ByVal sender As Object, ByVal notification As SimulIndListEventArgs)
#End Region

        ''' <summary>
        ''' 
        ''' </summary>
        ''' <remarks></remarks>
        Public Overrides Sub Calculer(Optional ByVal ForcerCalcul As Boolean = False)

            Dim debut, fin As Double
            debut = Environment.TickCount
            ''_moteur.calculeInit()

            MyBase.Calculer()

            ''_moteur.calculeCloture()
            ''MAJradar()
            'Créer un tableau synthétique à l'aide de tous les résultats correspondant aux valeurs du radar
            fin = Environment.TickCount

        End Sub

        ''' <summary>
        ''' 
        ''' </summary>
        ''' <remarks></remarks>
        Private Sub MAJradar()
        End Sub

    End Class
End Namespace